package com.example.excel.db;

import android.annotation.SuppressLint;
import android.content.Context;

import com.example.excel.bean.DaoMaster;
import com.example.excel.bean.DaoSession;
import com.example.excel.bean.InventoryBeanDao;

import org.greenrobot.greendao.query.QueryBuilder;

public class DbController {
    private static final String DB_NAME = "greendaotest";

    @SuppressLint("StaticFieldLeak")
    private volatile static DbController mDbController;
    private Context context;
    //多线程中要被共享的使用volatile关键字修饰
    private static DaoMaster sDaoMaster;
    @SuppressLint("StaticFieldLeak")
    private static DaoMaster.DevOpenHelper sHelper;
    private static DaoSession sDaoSession;

    private InventoryBeanDao inventoryBeanDao;


    public static DbController getInstance() {
        if (mDbController == null) {
            synchronized (DbController.class) {
                if (mDbController == null) {
                    mDbController = new DbController();
                }
            }
        }
        return mDbController;
    }

    private DbController() {
    }

    public void init(Context context){
        this.context = context;
        getDaoMaster();
        setDebug();
        sDaoSession = sDaoMaster.newSession();
        inventoryBeanDao = sDaoSession.getInventoryBeanDao();
    }


    /**
     * 判断是否有存在数据库，如果没有则创建
     */
    public DaoMaster getDaoMaster() {
        if (sDaoMaster == null) {
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, DB_NAME, null);
            sDaoMaster = new DaoMaster(helper.getWritableDatabase());
        }
        return sDaoMaster;
    }

    /**
     * 完成对数据库的添加、删除、修改、查询操作，仅仅是一个接口
     */
    public DaoSession getDaoSession() {
        if (sDaoSession == null) {
            if (sDaoMaster == null) {
                sDaoMaster = getDaoMaster();
            }
            sDaoSession = sDaoMaster.newSession();
        }
        return sDaoSession;
    }

    /**
     * 打开输出日志，默认关闭
     */
    public void setDebug() {
        QueryBuilder.LOG_SQL = true;
        QueryBuilder.LOG_VALUES = true;
    }

    /**
     * 关闭所有的操作，数据库开启后，使用完毕要关闭
     */
    public void closeConnection() {
        closeHelper();
        closeDaoSession();
    }

    public void closeHelper() {
        if (sHelper != null) {
            sHelper.close();
            sHelper = null;
        }
    }

    public void closeDaoSession() {
        if (sDaoSession != null) {
            sDaoSession.clear();
            sDaoSession = null;
        }
    }
}
